package file;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileApiTest {

    /**
     * 构造方法:
     * File(String pathname)：根据一个文件路径得到File对象
     * File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
     * File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
     *
     * 创建功能:
     * public boolean createNewFile():创建文件 如果存在这样的文件，就不创建了
     * public boolean mkdir():创建单级文件夹,如果存在这样的文件夹，就不创建了
     * public boolean mkdirs():创建多级文件夹,如果父文件夹不存在，会帮你创建出来
     *
     * File类的重命名和删除功能:
     * public boolean renameTo(File dest):把文件重命名为指定的文件路径
     * public boolean delete():删除文件或者文件夹(不走回收站)
     *
     * File类的判断功能:
     * public boolean isDirectory():判断是否是目录
     * public boolean isFile():判断是否是文件
     * public boolean exists():判断是否存在
     * public boolean canRead():判断是否可读
     * public boolean canWrite():判断是否可写
     * public boolean isHidden():判断是否隐藏
     *
     * File类的获取功能:
     * public String getAbsolutePath()：获取绝对路径
     * public String getPath():获取路径
     * public String getName():获取名称
     * public long length():获取长度。字节数
     * public long lastModified():获取最后一次的修改时间，毫秒值
     * public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
     * public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
     *
     * File类 文件名称过滤器的概述及使用:
     * public String[] list(FilenameFilter filter)
     * public File[] listFiles(FileFilter filter)
     *
     */


    public static void main(String[] args) throws IOException {
        demo();   //构造方法
        demo1();  //创建文件及目录
        demo2();  //重命名和删除功能
        demo3();  //File类的判断功能
        demo4();  //File类获取功能
        demo5();  //File类过滤器


    }

    private static void demo5() {
        File dir = new File("E:\\");
        String[] list = dir.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir1, String name) {
//                System.out.println(dir);   //路径
//                System.out.println(name);  //文件名
                File file=new File(dir,name);
                return file.isFile()&&file.getName().endsWith(".jpg");
//                return true;   true符合条件返回在列表中,false不符合
            }
        });
        for (String s : list) {
            System.out.println(s);
        }
    }

    private static void demo4() {
        File file1 = new File("ccc.txt");
        File file2 = new File("D:\\双元课堂\\day19\\ccc.txt");
        //System.out.println(file1.getAbsolutePath());			//获取绝对路径
        //System.out.println(file2.getAbsolutePath());

        //System.out.println(file1.getPath());	 //获取构造方法中传入路径
        //System.out.println(file2.getPath());

//		System.out.println(file1.getName());	 //获取文件或者文件的名字(文件带后缀)
//		System.out.println(file2.getName());
//
//		System.out.println(file1.length());

        Date d = new Date(file1.lastModified());				//文件的最后修改时间(毫秒值)
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        System.out.println(sdf.format(d));


        File dir = new File("F:/双元课堂/day19/video");  //这样写也是可以的和"D:\\双元课堂/day19"都行
        String[] arr = dir.list();						//获取文件夹下的文件名及文件夹名的数组集合
        for (String string : arr) {
            System.out.println(string);
        }

        File[] subFiles = dir.listFiles();              //获取文件夹下的文件名及文件夹名的File数组集合
        for (File file : subFiles) {					//获取file文件对象
            System.out.println(file);                   //打印文件路径,file重写了toString()方法
        }

    }

    private static void demo3() {
        File dir1 = new File("ccc");
        System.out.println(dir1.isDirectory());			//判断是否是文件夹

        File dir2 = new File("zzz");
        System.out.println(dir2.isDirectory());

        System.out.println(dir1.isFile());				//判断是否是文件
        System.out.println(dir2.isFile());

        File file = new File("zzz");
        file.setReadable(false);  //设置不可读
        System.out.println(file.canRead()); 			//windows系统认为所有的文件都是可读的
        file.setWritable(true);   //设置可写
        System.out.println(file.canWrite()); 			//windows系统可以设置为不可写

        File file2 = new File("aaa.txt");    //先把aaa.txt右键隐藏了
        System.out.println(file2.isHidden());			//判断是否是隐藏文件
        System.out.println(file.isHidden());
    }

    private static void demo2() {
        File file1 = new File("ooo.txt");
        File file2 = new File("D:\\xxx.txt");
        System.out.println(file1.renameTo(file2));   // ooo名改成xxx名字(径名相同，就是改名,路径名不同，就是改名并剪切)

        File file3 = new File("yyy.txt");
        System.out.println(file1.delete());         //删除文件,不走回收站

        File file4 = new File("aaa");
        System.out.println(file2.delete());        //删除空文件夹;

        File file5 = new File("ccc");		//如果删除一个文件夹,那么文件夹必须是空的
        System.out.println(file3.delete());
    }

    private static void demo1() throws IOException {
        File file3 = new File("yyy.txt");
        System.out.println(file3.createNewFile());			//如果没有就创建返回true,如果存在就不创建返回false;

        File dir1 = new File("aaa");     //创建文件夹
        System.out.println(dir1.mkdir());

        File dir2 = new File("ccc\\ddd");
        System.out.println(dir2.mkdirs()); 				//创建多级目录文件夹
    }

    private static void demo() {
        File file=new File("G:\\电影\\双花店BD中字1280x720版【6V电影www.6vdy.com提供】.rmvb"); //绝对路径
        System.out.println(file.exists());
        File file1=new File("test.txt"); //相对路径
        System.out.println(file1.exists());

        String parent = "G:\\电影";
        String child = "双花店BD中字1280x720版【6V电影www.6vdy.com提供】.rmvb";
        File file2 = new File(parent,child); //根据一个目录和一个子文件/目录得到File对象
        System.out.println(file2.exists());
    }
}
